// Copyright 2007-2008 Rory Plaire (codekaizen@gmail.com)

using System;
using NPack.Interfaces;

namespace NPack
{
    /// <summary>
    /// A matrix component or matrix element which represents a complex number with a 
    /// <see cref="System.Double"/> real component and imaginary coefficient.
    /// </summary>
    /// <remarks>
    /// Use this structure as the type parameter for <see cref="Matrix{T}"/> when you want
    /// a matrix of Double floating point complex values, since it implements <see cref="IComputable{T}"/>, 
    /// which allows numerical operations on value types.
    /// </remarks>
    public struct DoubleComplexComponent : IEquatable<DoubleComplexComponent>,
                                           IComparable<DoubleComplexComponent>, IComputable<DoubleComplexComponent>,
                                           IConvertible, IFormattable
    {
        #region IEquatable<DoubleComplexComponent> Members

        public Boolean Equals(DoubleComplexComponent other)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region IComparable<DoubleComplexComponent> Members

        public Int32 CompareTo(DoubleComplexComponent other)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region IComputable<DoubleComplexComponent> Members

        public DoubleComplexComponent Abs()
        {
            throw new NotImplementedException();
        }

        public DoubleComplexComponent Set(Double value)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region IAddable<DoubleComplexComponent> Members

        public DoubleComplexComponent Add(DoubleComplexComponent b)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region ISubtractable<DoubleComplexComponent> Members

        public DoubleComplexComponent Subtract(DoubleComplexComponent b)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region IHasZero<DoubleComplexComponent> Members

        public DoubleComplexComponent Zero
        {
            get { throw new NotImplementedException(); }
        }

        #endregion

        #region INegatable<DoubleComplexComponent> Members

        public DoubleComplexComponent Negative()
        {
            throw new NotImplementedException();
        }

        #endregion

        #region IMultipliable<DoubleComplexComponent> Members

        public DoubleComplexComponent Multiply(DoubleComplexComponent b)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region IDivisible<DoubleComplexComponent> Members

        public DoubleComplexComponent Divide(DoubleComplexComponent b)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region IHasOne<DoubleComplexComponent> Members

        public DoubleComplexComponent One
        {
            get { throw new NotImplementedException(); }
        }

        #endregion

        #region IBooleanComparable<DoubleComplexComponent> Members

        public Boolean GreaterThan(DoubleComplexComponent value)
        {
            throw new NotImplementedException();
        }

        public Boolean GreaterThanOrEqualTo(DoubleComplexComponent value)
        {
            throw new NotImplementedException();
        }

        public Boolean LessThan(DoubleComplexComponent value)
        {
            throw new NotImplementedException();
        }

        public Boolean LessThanOrEqualTo(DoubleComplexComponent value)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region IExponential<DoubleComplexComponent> Members

        public DoubleComplexComponent Power(Double power)
        {
            throw new NotImplementedException();
        }

        public DoubleComplexComponent Sqrt()
        {
            throw new NotImplementedException();
        }

        public DoubleComplexComponent Log(Double newBase)
        {
            throw new NotImplementedException();
        }

        public DoubleComplexComponent Log()
        {
            throw new NotImplementedException();
        }

        public DoubleComplexComponent Exp()
        {
            throw new NotImplementedException();
        }

        #endregion

        #region IConvertible Members

        public TypeCode GetTypeCode()
        {
            throw new NotImplementedException();
        }

        public Boolean ToBoolean(IFormatProvider provider)
        {
            throw new NotImplementedException();
        }

        public Byte ToByte(IFormatProvider provider)
        {
            throw new NotImplementedException();
        }

        public Char ToChar(IFormatProvider provider)
        {
            throw new NotImplementedException();
        }

        public DateTime ToDateTime(IFormatProvider provider)
        {
            throw new NotImplementedException();
        }

        public Decimal ToDecimal(IFormatProvider provider)
        {
            throw new NotImplementedException();
        }

        public Double ToDouble(IFormatProvider provider)
        {
            throw new NotImplementedException();
        }

        public Int16 ToInt16(IFormatProvider provider)
        {
            throw new NotImplementedException();
        }

        public Int32 ToInt32(IFormatProvider provider)
        {
            throw new NotImplementedException();
        }

        public Int64 ToInt64(IFormatProvider provider)
        {
            throw new NotImplementedException();
        }

        [CLSCompliant(false)]
        public SByte ToSByte(IFormatProvider provider)
        {
            throw new NotImplementedException();
        }

        public Single ToSingle(IFormatProvider provider)
        {
            throw new NotImplementedException();
        }

        public String ToString(IFormatProvider provider)
        {
            throw new NotImplementedException();
        }

        public Object ToType(Type conversionType, IFormatProvider provider)
        {
            throw new NotImplementedException();
        }

        [CLSCompliant(false)]
        public UInt16 ToUInt16(IFormatProvider provider)
        {
            throw new NotImplementedException();
        }

        [CLSCompliant(false)]
        public UInt32 ToUInt32(IFormatProvider provider)
        {
            throw new NotImplementedException();
        }

        [CLSCompliant(false)]
        public UInt64 ToUInt64(IFormatProvider provider)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region IFormattable Members

        public String ToString(String format, IFormatProvider formatProvider)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region IComputable<DoubleComplexComponent> Members


        public DoubleComplexComponent SetFrom(DoubleComplexComponent value)
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}